package com.liu;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 消费者 --
 */
public class ConsumerTwo {

    public static void main(String[] args) throws IOException, TimeoutException {
        //1.创建连接工厂  设置连接信息
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.254.131");//连接的mq服务器地址
        factory.setUsername("root");//默认市guest
        factory.setPassword("123123");//默认市guest
        factory.setPort(5672);//连接端口号
        factory.setVirtualHost("erp");//虚拟主机  默认是 /

        //2.用连接工厂创建连接
        Connection conn = factory.newConnection();

        //3.创建信道
        Channel channel = conn.createChannel();

        //声明队列名称
        String queueName = "work-queue";
        //4.声明队列
        /**
         * queue  队列名称
         * durable  是否持久化  true 队列持久化 mq服务器重启仍然保留 false队列名就会消失
         * exclusive  是否独占连接 true 信道必须是同一个连接创建的才 能读取队列中的消息
         * autoDelete  是否自动删除队列  （前提是队列不再使用）
         * arguments  向队列传递的其他参数
         */
        channel.queueDeclare(queueName, false, false, false, null);

        System.out.println("消费者Two开始消费消息");

        //设置预取值  mq服务一次给消费者最多投递的数量
        channel.basicQos(1);
        //5.读取消息
        channel.basicConsume(queueName, false, ((consumerTag, message) -> {
            String content = new String(message.getBody());
            System.out.println("消费者Two收到消息：" + content);
            work(content);
            channel.basicAck(message.getEnvelope().getDeliveryTag(),false);//手动应答
        }), consumerTag -> {
        });


    }

    static void work(String content) {
        int len = content.length();
        for (int i = 0; i < len; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }


}
